package com.yztstudy.clients;

import com.yztstudy.clients.impl.ProductHystrixImpl;
import com.yztstudy.entity.Product;
import com.yztstudy.param.ProductCollectParam;
import com.yztstudy.param.ProductIdParam;
import com.yztstudy.param.ProductSaveParam;
import com.yztstudy.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * 商品服务远程调用接口
 */

@FeignClient(value = "product-service", fallback = ProductHystrixImpl.class)
public interface ProductFeignClient {

    /**
     * TODO 搜索服务,获取全部商品数据,用于同步到ES服务
     * @return
     */
    @GetMapping("/product/list")
    public List<Product> allList();


    /**
     * TODO 根据商品ID集合查询多个商品
     * @param productCollectParam 商品ID的集合
     * @return
     */
    @PostMapping("/product/collect/list")
    public R productIds(@RequestBody ProductCollectParam productCollectParam);

    /**
     * TODO 购物车中的商品详情
     * @param productIdParam 商品ID
     * @return
     */
    @PostMapping("/product/cart/detail")
    public Product cartDetail(@RequestBody ProductIdParam productIdParam);

    /**
     * TODO 根据商品ID集合来获取多个商品
     * @param productCollectParam 商品ID集合
     * @return
     */
    @PostMapping("/product/cart/list")
    public List<Product> cartList(@RequestBody ProductCollectParam productCollectParam);


    /**
     * TODO 查询某个类别是否有商品
     * @param categoryId 类别ID
     * @return
     */
    @PostMapping("/product/admin/count")
    public Long adminCount(@RequestBody Integer categoryId);


    /**
     * TODO 保存商品
     * @param productSaveParam 要保存的商品
     * @return
     */
    @PostMapping("/product/admin/save")
    public R adminSave(@RequestBody ProductSaveParam productSaveParam);


    /**
     * TODO 更新商品
     * @param product 商品对象
     * @return
     */
    @PostMapping("/product/admin/update")
    public R adminUpdate(@RequestBody Product product);


    /**
     * TODO 删除商品
     * @param productId 商品Id
     * @return
     */
    @PostMapping("/product/admin/remove")
    public R adminRemove(@RequestBody Integer productId);
}
